package tree_map_set;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 86187
 * Date: 2022-08-15
 * Time: 18:38
 */

public class TestMyTreeSet {

    //把10W个数据当中的重复的元素删除掉
    public static void func1(int[] array) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            set.add(array[i]);
        }
        System.out.println(set);
    }

    //找到10W个数据中的第一个重复的数据
    public static int func2(int[] array) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            if(!set.contains(array[i])) {
                set.add(array[i]);
            }else {
                return array[i];
            }
        }
        return -1;
    }

    //统计10w个数据中每个数据出现的个数
    public static void func3(int[] array) {
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            int key = array[i];
            if(map.get(key) == null) { //这个if语句也可以写为if(!map.containsKey(key))
                map.put(key,1);
            }else {
                int val = map.get(key); //返回 key 对应的 value
                map.put(key,val+1);
            }
        }
        System.out.println(map);
    }
    //func3的优化
    public static void func33(int[] array) {
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < array.length; i++) {
            int key = array[i];
            int value = map.getOrDefault(key,0);

            map.put(key,value+1);
        }
        System.out.println(map);
    }

    //获取10W个数据
    public static void main(String[] args) {
        int[] array = new int[10_0000];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(5_000);
        }
        //把10W个数据当中的重复的元素删除掉
        func1(array);

        //找到10W个数据中的第一个重复的数据
        System.out.println(func2(array));

        //统计10w个数据中每个数据出现的个数
        func3(array);
        func33(array);

    }

    /**
     *  boolean add(E e) 添加元素，但重复元素不会被添加成功
     *
     * void clear() 清空集合
     *
     * boolean contains(Object o) 判断 o 是否在集合中
     *
     * Iterator<E> iterator() 返回迭代器
     *
     * boolean remove(Object o) 删除集合中的 o
     * int size() 返回set中元素的个数
     *
     * boolean isEmpty() 检测set是否为空，空返回true，否则返回false
     * Object[] toArray() 将set中的元素转换为数组返回
     *
     * boolean containsAll(Collection<?> c) 集合c中的元素是否在set中全部存在，是返回true，否则返回false
     *
     * boolean addAll(Collection<? extendsE> c)
     * 将集合c中的元素添加到set中，可以达到去重的效果
     */
    public static void main1(String[] args) {
        Set<String> set = new TreeSet<>();
        //Set当中都是不重复的数据且必须是可以比较的 所以一般情况下 用来去重
        //底层是TreeMap

        set.add("abc");
        //只会有一个 abc
        set.add("abc");
        set.add("hello");
        set.add("bite");
        System.out.println(set);

    }
}
